#pragma once
#include "../auto_lib/auto_lib.h"
#include "../pid/pid.h"
#include "stdio.h"

#define chassis_dst_mm_avg()                                                   \
  ((chassis.get_dist_mm(-1) + chassis.get_dist_mm(1)) / 2)

#define PRINTF                                                                 \
  if (1)                                                                       \
  printf

//////////////////////////////自动程序运行显示
#define AutoPrint_1 45
#define AutoPrint_2 120
#define AutoPrint_status_y 175
#define AutoPrint_detail_y 225

void clear_auto_info_line(int32_t x, int32_t y, fontType ft);

//使用示例如下：auto_print_60(5, 100, "%s %d %s","xxx", 111, "c");
template <typename... Arg>
void auto_print_60(int32_t x, int32_t y, Arg... other) {
  clear_auto_info_line(x, y, fontType::prop60);
  screen_set_pen_font(fontType::prop60);
  Print(x, y, true, other...);
  printf(other...);
  printf("\n");
}

template <typename... Arg>
void auto_print_40(int32_t x, int32_t y, Arg... other) {
  clear_auto_info_line(x, y, fontType::prop40);
  screen_set_pen_font(fontType::prop40);
  Print(x, y, true, other...);
  printf(other...);
  printf("\n");
}

template <typename... Arg> void auto_detail_disp(Arg... other) {
  auto_print_40(0, AutoPrint_detail_y, other...);
}

template <typename... Arg> void auto_status_print(int32_t x, Arg... other) {
  // clear_auto_info_line(x, AutoPrint_status_y, fontType::prop40);
  screen_set_pen_font(fontType::prop30);
  Print(x, AutoPrint_status_y, true, other...);
  // PRINTF(other...);
  // PRINTF("\n");
}

extern int timeout_toarm;
void get_ring();
void out_ring();
void auto_arm_holdinside_blue();

void stop_getring();
void hold_inside();
void auto_toarm();
void delay_clamp();
void twitch();
// auto routes
void auto_left_1();
void auto_left_2();
void auto_left_3();
void auto_left_4();
void auto_left_5();
void auto_left_6();

void auto_right_1();
void auto_right_2();
void auto_right_3();
void auto_right_4();
void auto_right_5();
void auto_right_6();

void auto_skills();
void auto_test();
//////////////////////////////////////////////////////////////////////////////////////
extern timer t_auto; //全局自动计时器
//////////////////////////////////////////////////////////////////////////////////////

#define enc_dig_upright -135
#define enc_dig_prepare_hit_hang_stick -210
#define enc_dig_prepare_to_cellect_triball -350
#define enc_dig_collect_triball -550
